package Tree;

/**
 * 二叉树的镜像
 * 
 * @author Administrator
 * 
 */
public class MirrorsofTree {

	public static void main(String[] args) {
		// 首先生成一颗二叉树
		int a[] = { 10, 6, 21, 5, 8, 22, 12 };
		BinaryTreeCreate tree = new BinaryTreeCreate();
		for (int i = 0; i < a.length; i++) {
			// 根节点设为null
			tree.createBinaryTree(tree.root, a[i]);
		}
		BinaryTreeCreate.preOrder(tree.root);
		System.out.println("");
		BinaryTreeCreate.inOrder(tree.root);
		mirrorOfTree(tree.root);

		System.out.println("");
		BinaryTreeCreate.preOrder(tree.root);
		System.out.println("");
		BinaryTreeCreate.inOrder(tree.root);
	}

	// 对于满二叉树的算法
	static void mirrorOfTree(TreeNode node) {
		// 在牛客网上AC的代码
		if (node != null) {
			TreeNode temp = node.left;
			node.left = node.right;
			node.right = temp;
			mirrorOfTree(node.left);
			mirrorOfTree(node.right);
		}
//		if (node == null) {
//			return;
//		}
//		if (node.left == null || node.right == null) {
//			return;
//		} // 交换左右两个节点的值 
//		TreeNode tempTreeNode = node.left;
//		node.left = node.right;
//		node.right = tempTreeNode;
//		if (node.left != null) {
//			mirrorOfTree(node.left);
//		}
//		if (node.right != null) {
//			mirrorOfTree(node.right);
//		}
		
	}
}
